package cn.e4j.modular.api.service;

import cn.e4j.core.dto.Dtos;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.modular.api.mapper.Gwat100Mapper;
import cn.e4j.modular.api.util.CommonUtils;
import cn.e4j.modular.crm.entity.*;
import cn.e4j.modular.crm.mapper.GwakTMapper;
import cn.e4j.modular.crm.mapper.GwaklTMapper;
import cn.e4j.modular.crm.mapper.GwalTMapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class Gwat100Service{
    @Autowired
    private Gwat100Mapper gwat100Mapper;

    @Autowired
    private GwaklTMapper gwaklTMapper;

    @Autowired
    private GwalTMapper gwalTMapper;

    @Autowired
    private GwakTMapper gwakTMapper;

    /**
     * 获取产品分类
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwahData(Dto inDto) {
        return gwat100Mapper.getGwah(inDto);
    }

    /**
     * 获取产品分类图片
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwamData(Dto inDto) {

        return gwat100Mapper.getGwam(inDto);
    }

    /**
     * 获取产品系列
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwaoData(Dto inDto) {

        return gwat100Mapper.getGwao(inDto);
    }

    /**
     * 获取产品信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwamPage(Page<Object> obj,Dto inDto) {
        return gwat100Mapper.getGwamPage(obj,inDto);
    }

    /**
     * 获取产品详细信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwamDetail(Dto inDto) {
        return gwat100Mapper.getGwamDetail(inDto);
    }


    /**
     * 获取产品介绍
     *
     * @param inDto
     * @return
     */
    public Dto getGwamOther(Dto inDto) {
        return gwat100Mapper.getGwamOther(inDto);
    }

    /**
     * 获取配置表信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwax(Dto inDto) {

        return gwat100Mapper.getGwax(inDto);
    }

    /**
     * 获取产品属性特征信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwan(Dto inDto) {

        return gwat100Mapper.getGwan(inDto);
    }

    /**
     * 获取产品属性特征值信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwaj(Dto inDto) {

        return gwat100Mapper.getGwaj(inDto);
    }

    /**
     * 获取产品属性特征值信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getCharacteristic(Dto inDto) {
        List<Dto> pList = gwat100Mapper.getGwan(inDto);
        for (Dto dto : pList) {
            dto.put("child",  gwat100Mapper.getGwaj(dto));
        }
        return pList;
    }

    /**
     * 根据母料号查询所有子料号
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwam0(Dto inDto) {

        return gwat100Mapper.getGwam0(inDto);
    }

    /**
     * 根据子料号查询所有子料号
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwam1(Dto inDto) {

        return gwat100Mapper.getGwam1(inDto);
    }

    /**
     * 获取产品评价信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwcw(Page page,Dto inDto) {
        List<Dto> delList = new ArrayList();
        List<Dto> pList = gwat100Mapper.getGwcwPage(page,inDto);
        for (Dto dto : pList) {
            dto.put("GWCWENT", inDto.getString("ENT"));
            dto.put("key", inDto.getString("key"));
            List<Dto> list = gwat100Mapper.getGwcw(dto);
            String gwcw005 = list.get(0).getString("GWCW005");
            gwcw005=(gwcw005==null?"6":gwcw005);
            if (gwcw005.equals("6")) {
                delList.add(dto);
            }
            dto.put("GWCW005", gwcw005);
        }
        pList.removeAll(delList);
        return pList;
    }

    /**
     * 获取产品评价信息
     *
     * @param inDto
     * @return
     */
    public Dto getGwcwCount(Dto inDto) {
        Dto outDto = Dtos.newDto();
        List<Dto> pList = gwat100Mapper.getGwcw2(inDto);
        int count1 = 0; //好评
        int count2 = 0; //中评
        int count3 = 0; //差评
        for (Dto dto : pList) {
            dto.put("GWCWENT", inDto.getString("ENT"));
            List<Dto> list = gwat100Mapper.getGwcw(dto);
            Integer GWCW005 = list.get(0).getInteger("GWCW005");
            int gwcw005 = (GWCW005==null?6:GWCW005);
            if (gwcw005 == 5) {
                count1++;
            } else if (gwcw005 <= 2) {
                count3++;
            } else {
                count2++;
            }
        }
        outDto.put("count1", count1);
        outDto.put("count2", count2);
        outDto.put("count3", count3);
        outDto.put("count", pList.size());
        return outDto;
    }

    /**
     * 查询所有子料号获取产品评价信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwcw1(Dto inDto) {
        List<Dto> sList = new ArrayList<>();
        List<Dto> delList = new ArrayList();
        if (inDto.getString("GWAM005").equals("0")) {
            sList = gwat100Mapper.getGwam0Page(inDto);
        } else {
            sList = gwat100Mapper.getGwam1Page(inDto);
        }
        for (Dto dto : sList) {
            dto.put("GWCWENT", inDto.getString("ENT"));
            dto.put("key", inDto.getString("key"));
            List<Dto> list = gwat100Mapper.getGwcw(dto);
            String gwcw005 = list.get(0).getString("GWCW005");
            gwcw005 = (gwcw005==null?"6":gwcw005);
            if (gwcw005.equals("6")) {
                delList.add(dto);
            }
            dto.put("GWCW005", gwcw005);
        }
        sList.removeAll(delList);
        return sList;
    }

    /**
     * 查询所有子料号获取产品评价信息
     *
     * @param inDto
     * @return
     */
    public Dto getGwcwCount1(Dto inDto) {
        Dto outDto = Dtos.newDto();
        int count1 = 0; //好评
        int count2 = 0; //中评
        int count3 = 0; //差评
        List<Dto> sList = new ArrayList<>();
        if (inDto.getString("GWAM005").equals("0")) {
            sList =gwat100Mapper.getGwam0(inDto);
        } else {
            sList = gwat100Mapper.getGwam1(inDto);
        }
        for (Dto dto : sList) {
            dto.put("GWCWENT", inDto.getString("ENT"));
            List<Dto> list = gwat100Mapper.getGwcw(dto);
            Integer GWCW005 = list.get(0).getInteger("GWCW005");
            int gwcw005 = (GWCW005==null?6:GWCW005);
            if (gwcw005 == 5) {
                count1++;
            } else if (gwcw005 <= 2) {
                count3++;
            } else {
                count2++;
            }
        }
        outDto.put("count1", count1);
        outDto.put("count2", count2);
        outDto.put("count3", count3);
        outDto.put("count", sList.size());
        return outDto;
    }

    /**
     * 获取暂存产品信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwcmDataPage(Dto inDto) {
        return gwat100Mapper.getGwcmDataPage(inDto);
    }

    /**
     * 获取客户信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwakPage(Dto inDto) {
        return gwat100Mapper.getGwakPage(inDto);
    }

    /**
     * 获取线人信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwak(Dto inDto) {

        return gwat100Mapper.getGwak(inDto);
    }

    /**
     * 新增gwcm_t
     *
     * @param inDto
     * @return
     */
    @Transactional
    public void insert(Dto inDto) {
        GwcmT gwcm_tPO = CommonUtils.toJavaClass(inDto, GwcmT.class);
        gwcm_tPO.insert();
    }

    /**
     * 新增gwcn_t
     *
     * @param inDto
     * @return
     */
    @Transactional
    public void insertGwcn(Dto inDto) {
        Dto outDto = Dtos.newDto();
        GwcnT gwcn_tPO = CommonUtils.toJavaClass(inDto, GwcnT.class);
        gwcn_tPO.insert();
    }

    /**
     * 暂存
     */
    @Transactional
    public void saveData(GwcmT gwcm_tPO, List<GwcnT> gwcn_tPOs) {

        gwcm_tPO.insert();

        for (GwcnT gwcn_tPO : gwcn_tPOs) {
            gwcn_tPO.insert();
        }
    }

    /**
     * 客户信息保存
     */
    @Transactional
    public void saveCustomer(GwakT gwak_tPO, GwaklT gwakl_tPO, GwalT gwal_tPO) {
        gwak_tPO.insert();
        gwakl_tPO.insert();
        gwal_tPO.insert();

    }
//
    /**
     * 根据手机号获取客户数量
     */
    public int checkCustomerPhone(Dto inDto) {
        return gwakTMapper.wx_getRows(inDto);
    }
//
    /**
     * 根据客户名称获取客户数量
     */
    public int checkCustomerName(Dto inDto) {
        return gwaklTMapper.wx_rows(inDto);
    }

    /**
     * 修改gwcm_t
     *
     * @return
     */
    @Transactional
    public void update(List<GwcmT> gwcm_tPOs, List<Dto> gwcn_tPOs) {
        for (GwcmT gwcm_tPO : gwcm_tPOs) {
            //WHERE  gwcment = #{GWCMENT} AND GWCMDOCNO = #{gwcmdocno} AND gwcmseq = #{gwcmseq}
            UpdateWrapper<GwcmT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCMENT",gwcm_tPO.getGWCMENT());
            wrapper.eq("GWCMDOCNO",gwcm_tPO.getGWCMDOCNO());
            wrapper.eq("GWCMSEQ",gwcm_tPO.getGWCMSEQ());
            gwcm_tPO.update(wrapper);
        }

        for (Dto gwcn_tPO : gwcn_tPOs) {
            gwat100Mapper.updateGwcn(gwcn_tPO);
        }
    }

    /**
     * 修改gwcn_t
     *
     * @param inDto
     * @return
     */
    @Transactional
    public void updateGwcn(Dto inDto) {
        GwcnT gwcnT = CommonUtils.toJavaClass(inDto, GwcnT.class);

        //WHERE  GWCNENT = #{gwcnent} AND GWCNDOCNO = #{gwcndocno} AND GWCNSEQ = #{gwcnseq} AND GWCNSEQ2 = #{gwcnseq2}
        UpdateWrapper<GwcnT> wrapper = new UpdateWrapper<>();
        wrapper.eq("GWCNENT",gwcnT.getGWCNENT());
        wrapper.eq("GWCNDOCNO",gwcnT.getGWCNDOCNO());
        wrapper.eq("GWCNSEQ",gwcnT.getGWCNSEQ());
        wrapper.eq("GWCNSEQ2",gwcnT.getGWCNSEQ2());

        gwcnT.update(wrapper);
    }

    /**
     * 意向订单提交修改数据
     *
     * @return
     */
    @Transactional
    public void updateGoodsInfo(List<Dto> gwcm_tPOs, List<Dto> gwcn_tPOs) {
        for (Dto gwcm_tPO : gwcm_tPOs) {

            GwcmT gwcmT = CommonUtils.toJavaClass(gwcm_tPO, GwcmT.class);
            //WHERE GWCMENT = #{dto.GWCMENT} AND GWCMDOCNO = #{dto.GWCMDOCNO} AND GWCMSEQ = #{dto.GWCMSEQ}
            UpdateWrapper<GwcmT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCMENT",gwcmT.getGWCMENT());
            wrapper.eq("GWCMDOCNO",gwcmT.getGWCMDOCNO());
            wrapper.eq("GWCMSEQ",gwcmT.getGWCMSEQ());
            gwcmT.update(wrapper);
        }

        for (Dto gwcn_tPO : gwcn_tPOs) {
            GwcnT gwcnT = CommonUtils.toJavaClass(gwcn_tPO, GwcnT.class);
            UpdateWrapper<GwcnT> wrapper = new UpdateWrapper<>();
            wrapper.eq("GWCNENT",gwcnT.getGWCNENT());
            wrapper.eq("GWCNDOCNO",gwcnT.getGWCNDOCNO());
            wrapper.eq("GWCNSEQ2",gwcnT.getGWCNSEQ2());

            if (CommonUtils.isNotEmpty(gwcnT.getGWCNSEQ()))
                wrapper.eq("GWCNSEQ",gwcnT.getGWCNSEQ());

            gwcnT.update(wrapper);
        }
    }

    /**
     * 获取当前的客户编号， 用于生成下一个流水号
     *
     * @param inDto
     * @return
     */
    public Dto getGwak001(Dto inDto) {
        return gwat100Mapper.getGwak001(inDto);
    }

    /**
     * 获取订单的最大项次
     *
     * @return
     */
    public Dto getMaxGwcmseq(Dto inDto) {
        return gwat100Mapper.getMaxGwcmseq(inDto);
    }

    /**
     * 获取产品已经选择的特征信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getSelectedCharacteristic(Dto inDto) {
        return gwat100Mapper.getSelectedCharacteristic(inDto);
    }

    /**
     * 获取产品评价信息
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwcwPage(Page page,Dto inDto) {
        List<Dto> pList = gwat100Mapper.getGwcwPage(page,inDto);
        return pList;
    }

    /**
     * 删除暂存--单笔
     *
     * @return
     */
    @Transactional
    public Dto delete(GwcnT gwcnT, GwcmT gwcmT) {
        Dto outDto = new Dto();
        //WHERE  gwcment = #{gwcment} AND gwcmdocno = #{} AND gwcmseq = #{gwcmseq}
        UpdateWrapper<GwcmT> gwcmTwrapper = new UpdateWrapper<GwcmT>();
        gwcmTwrapper.eq("GWCMENT",gwcmT.getGWCMENT());
        gwcmTwrapper.eq("GWCMDOCNO",gwcmT.getGWCMDOCNO());
        gwcmTwrapper.eq("GWCMSEQ",gwcmT.getGWCMSEQ());
        gwcmT.delete(gwcmTwrapper);
        UpdateWrapper<GwcnT> wrapper = new UpdateWrapper<GwcnT>();
        wrapper.eq("GWCNENT",gwcnT.getGWCNENT()).eq("GWCNDOCNO",gwcnT.getGWCNDOCNO())
               .eq("GWCNSEQ2",gwcnT.getGWCNSEQ());
             gwcnT.delete(wrapper);
        return outDto;
    }

    /**
     * 获取商机区域的业务人员
     *
     * @param inDto
     * @return
     */
    public List<Dto> getGwaa(Dto inDto) {
        return gwat100Mapper.getGwaa(inDto);
    }

    /**
     *功能描述
     * @author caijy
     * @description  获取币别
     * @datetime 2019-11-19 0019 16:46
     * @param inDto
     * @return java.util.List<cn.e4j.core.dto.impl.Dto>
     */
    public List<Dto> getCoin(Dto inDto) {

        return gwat100Mapper.getCoin(inDto);
    }
}
